package xin.nick.demo;

//要求
//1、使用Java语言编写，尽可能展示你的编码能力（Java语法、编码风格等），不用运行
//2、在界面时直接的编写，不要在IDE上写完再复制过来
//3、有任何问题可以在本界面右下角发信息给我
//4、控制在1小时内
//评测题目: 写一段java多线程代码，完成如下逻辑，同时启动3个线程从1开始打印递增数字，
//  每次每个线程打印3次，打印到36程序结束，输出如下：
// 线程1：1
// 线程1：2
// 线程1：3
// 线程2：4
// 线程2：5
// 线程2：6
// 线程3：7
// 线程3：8
// 线程3：9
// 线程1：10
// 线程1：11
// 线程1：12
// ......
// 线程3：34
// 线程3：35
// 线程3：36

/********************  这个方法不行,出现了线程在空转的情况 ******************************/
/**
 * @Auther: Nick inickning@outlook.com
 * @Date: 2021/3/18 20:41
 * @Description:
 */
public class MyThread3 extends Thread{

    public static final int MAX_NUMBER = 36;
    public static final int RUN_COUNT = 3;

    public static int count = 1;
    public static int currentNumber = 1;

    private int number = 0;
    private int nextNumber = 0;


    public void setNumber(int number) {
        this.number = number;
    }

    public void setNextNumber(int nextNumber) {
        this.nextNumber = nextNumber;
    }

    @Override
    public void run() {
        while(true) {
            synchronized (Object.class) {
                if(MyThread3.count < MyThread3.MAX_NUMBER) {
//                    System.out.println(MyThread3.currentNumber + "--" + number);
                    if(MyThread3.currentNumber == number) {
                        for (int i = 0; i < RUN_COUNT; i++) {
                            String myName = "线程" + number;
                            System.out.println(myName + ": " + MyThread3.count++);
                        }
                        MyThread3.currentNumber = this.nextNumber;
                    }
                } else {
                    break;
                }
            }
        }
    }

    public static void main(String[] args) {
        MyThread3 myThread1 = new MyThread3();
        myThread1.setNumber(1);
        myThread1.setNextNumber(2);

        MyThread3 myThread2 = new MyThread3();
        myThread2.setNumber(2);
        myThread2.setNextNumber(3);

        MyThread3 myThread3 = new MyThread3();
        myThread3.setNumber(3);
        myThread3.setNextNumber(1);

        myThread1.start();
        myThread2.start();
        myThread3.start();

    }

}
